State
的生命週期是指 StatefuleWidget
中的 State
從創建至消滅中間的過程,在這過程中存在多個不同階段的 Hooks
,我們可以在這些接口上實作想要的行為。
從StatefulWidget
原始碼追蹤 StatefulWidget
實體化的過程:
StatefulWidget
會先透過 createElement
產生 StatefulElement
StatefulElement
調用 StatefulWidget
的 createState
方法產生對應的 State
物件。State
創建時會去呼叫 initState
方法。
=> 通常會在這個階段進行State
資料初始化的動作。
當 StatefulWidget
有使用來自InheritedWidget
的資料時會觸發。
=> InheritedWidget
可以讓組件存取來自 Widget Tree 上層定義的資料,因此當上層資料有異動時會觸發這個 hook。
=> 同 StatelessWidget build
方法,用來定義UI的配置設定。
開發中使用 debug 模式時,在觸發 Hot Reload 時會呼叫該函數
=> 可以用來 debug 狀態是否正常。
當呼叫 setState
後,StatefulWidget
內部會檢查是否發生異動並觸發 didUpdateWidget
當組件節點即將被 Element Tree
移除時會被呼叫。
當組件節點被 Element Tree
移除後,若後續沒有確認不會在使用則觸發此方法並釋放占用的資源。
參考《Flutter实战》圖3.2 重新繪制成彩色版
我們可以從昨日的 練習成果 理解整個生命週期的過程。